package com.sojson.project.monitor.server.entity.bo;

import java.lang.management.ManagementFactory;

import com.sojson.base.impl.Base;
import com.sojson.util.ArithUtil;
import com.sojson.util.DateUtil;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * JVM相关信息
 * 
 * @author liu
 * @date 2021-11-10
 */
@ApiModel("JVM相关信息")
public class Jvm extends Base {

    /**  */
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("当前JVM占用的内存总数(M)")
    private double total;
    @ApiModelProperty("JVM最大可用内存总数(M)")
    private double max;
    @ApiModelProperty("JVM空闲内存(M)")
    private double free;
    @ApiModelProperty("JDK版本")
    private String version;
    @ApiModelProperty("JDK路径")
    private String home;

    /** 获取 当前JVM占用的内存总数(M) */
    public double getTotal() {
        return ArithUtil.div(total, (1024 * 1024), 2);
    }

    /** 设置 当前JVM占用的内存总数(M) */
    public void setTotal(double total) {
        this.total = total;
    }

    /** 获取 JVM最大可用内存总数(M) */
    public double getMax() {
        return ArithUtil.div(max, (1024 * 1024), 2);
    }

    /** 设置 JVM最大可用内存总数(M) */
    public void setMax(double max) {
        this.max = max;
    }

    /** 获取 JVM空闲内存(M) */
    public double getFree() {
        return ArithUtil.div(free, (1024 * 1024), 2);
    }

    /** 设置 JVM空闲内存(M) */
    public void setFree(double free) {
        this.free = free;
    }

    /** 获取 已用内存 */
    public double getUsed() {
        return ArithUtil.div(total - free, (1024 * 1024), 2);
    }

    /** 获取内存使用率 */
    public double getUsage() {
        return ArithUtil.mul(ArithUtil.div(total - free, total, 4), 100);
    }

    /**
     * 获取JDK名称
     */
    public String getName() {
        return ManagementFactory.getRuntimeMXBean().getVmName();
    }

    /** 获取 JDK版本 */
    public String getVersion() {
        return version;
    }

    /** 设置 JDK版本 */
    public void setVersion(String version) {
        this.version = version;
    }

    /** 获取 JDK路径 */
    public String getHome() {
        return home;
    }

    /** 设置 JDK路径 */
    public void setHome(String home) {
        this.home = home;
    }

    /** 获取 JDK启动时间 */
    public String getStartTime() {
        return DateUtil.dateToString(DateUtil.getServerStartDate());
    }

    /** 获取 JDK运行时间 */
    public String getRunTime() {
        return DateUtil.getDatePoor(DateUtil.nowDate(), DateUtil.getServerStartDate());
    }

}